import { PureController } from './pure';
import { plainToClass } from 'class-transformer';

/**
 * Controller 基类
 * 基于 restful 标准的路由规则
 */
export class RestController extends PureController {
  /**
   * 电话号码验证
   * @param phone Number 电话号码 必填
   * @return bool true|false bool值
   */
  isPhone(phone: any) {
    const exg = /^1(3|4|5|6|7|8|9)\d{9}$/;
    if (exg.test(phone)) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 邮箱验证
   * @param email String 电子邮箱 必填
   * @return bool true|false bool值
   */
  isEmail(email: any) {
    const exg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if (exg.test(email)) {
      return true;
    } else {
      return false;
    }
  }
  /**
   * 密码验证
   * 1. 最小密码长度为8个字符。
   * 2. 密码不得包含任何3个相同的连续字符。
   * 3. 密码必须至少使用四种可用字符类型中的三种：小写字母，大写字母，数字和符号。
   * @param password String 密码验证 必填
   * @return bool true|false bool值
   */
  isPasswd(password: any) {
    const containsrRe = /(\w)*(\w)\2{2}(\w)*/g.test(password); // 不得包含任何3个相同的连续字符
    const containsLovercase = /[a-z]/.test(password); // 小写
    const containsNumber = /\d/.test(password); // 数字
    const containsUppercase = /[a-z]/.test(password); // 大写
    const pattern = new RegExp(
      "[`~!@#$^&*()=|{}':;',\\[\\].<>/?~！@#￥……&*（）——|{}【】‘；：”“'。，、？]",
    ); // 特殊字符
    const containsOther = pattern.test(password);
    if (
      password.length > 7 &&
      !containsrRe &&
      containsLovercase &&
      containsNumber &&
      containsUppercase &&
      containsOther
    ) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 统一格式输出
   * @param code Number 代码code值 必填
   * @param data String|Array|Object 返回结果 非必填
   * @param message String 返回信息，默认为空 非必填
   * @return 格式输出 { code:1000, message:"", data:["xxx"] };
   */
  returnJson(code: any, data, message?: string, classType?: any) {
    if (classType) {
      data = plainToClass(classType, data);
    }
    return { code, message, data };
  }
}
